package com.thb.pay.service;

import com.thb.pay.core.utils.PageResult;
import com.thb.pay.db.service.IBaseService;
import com.thb.pay.entity.AgentAccount;
import com.thb.pay.vo.req.AgentAccountPageReq;
import com.thb.pay.vo.resp.AgentAccountVo;

import java.util.List;

/**
 * <p>
 * 代理商-账户表 服务类
 * </p>
 *
 * @author lucky
 * @since 2019-07-21
 */
public interface AgentAccountService extends IBaseService<AgentAccount> {

    /**
     * @param pageReq
     * @Description 分页获取代理商账号列表
     * @Author lucky
     * @data 2019/7/26 0:07
     */
    PageResult<AgentAccountVo> findPage(AgentAccountPageReq pageReq);

    /**
     * @Description 获取所有的代理商账号
     * @Author lucky
     * @data 2019/7/26 0:06
     */
    List<AgentAccountVo> listAll();

    /**
     * @param agentId 代理商id
     * @Description 获取代理商信息
     * @Author lucky
     * @data 2019/7/26 0:05
     */
    AgentAccountVo getByAgentId(Long agentId);

    /**
     * @param agentId 代理商id
     * @param amount  变动金额
     * @param bizType 业务类型,1-分润,2-提现,3-调账
     * @param bizItem 业务类目:10-余额,11-代付余额,12-冻结金额,13-保证金,20-支付,21-代付,22-线下充值,23-线上充值
     * @param orderId 订单id 【业务单 可选】
     * @Description 给代理商户加款
     * @Author lucky
     * @data 2019/7/25 23:56
     */
    void increaseAmountToAccount(Long agentId, Long amount, Integer bizType, String bizItem, String orderId);

    /**
     * @param agentId 代理商id
     * @param amount  变动金额
     * @param bizType 业务类型,1-分润,2-提现,3-调账
     * @param bizItem 业务类目:10-余额,11-代付余额,12-冻结金额,13-保证金,20-支付,21-代付,22-线下充值,23-线上充值
     * @Description 给代理商账户减款款
     * @Author lucky
     * @data 2019/7/25 23:48
     */
    void decreaseAmountToAccount(Long agentId, Long amount, Integer bizType, String bizItem);


    /**
     * @param agentId      代理商id
     * @param freezeAmount 冻结金额
     * @Description 冻结代理商账户金额(增加用户不可用金额)
     * @Author lucky
     * @data 2019/7/25 23:59
     */
    void freezeAmountToAccount(Long agentId, Long freezeAmount);


    /**
     * @param agentId        代理商id
     * @param unfreezeAmount 解冻金额
     * @param requestNo      请求单号
     * @param bizType        业务类型,1-分润,2-提现,3-调账
     * @Description 解冻代理商账户金额 并减款(减少账户余额 + 减少账户不可用金额 + 减少账户可结算金额)
     * @Author lucky
     * @data 2019/7/25 23:59
     */
    void unFreezeAmountToAccount(Long agentId, Long unfreezeAmount, String requestNo, Integer bizType);

    /**
     * @param agentId        代理商id
     * @param unfreezeAmount 解冻金额
     * @Description 结算失败：解冻  结算失败给代理商账户解冻金额(减少账户不可用金额)
     * @Author lucky
     * @data 2019/7/26 0:03
     */
    void unFreezeSettAmountToAccount(Long agentId, Long unfreezeAmount);

}
